package db

import (
	"fmt"

	"github.com/xujiajun/nutsdb"
	"github.com/xujiajun/nutsdb/inmemory"
	"lucidity.note/app/common"
	"lucidity.note/app/common/logger"
)

type NustDB struct {
	diskindex *DiskIndexConn
	memory    *MemoryConn
}

// Nustdb 数据库连接
var connect *NustDB = &NustDB{}

// 关闭数据连接
func (nust *NustDB) Close() {
	nust.diskindex.DB.Close()
}

// 数据库初始化
// @param enable {bool} 是否开启内存模式
func InitNustDB(enable bool) *NustDB {
	filedb, err := nutsdb.Open(nutsdb.DefaultOptions, nutsdb.WithDir(common.GetNustDBDirPath()))
	if err != nil {
		logger.FAULT.Fatalf(fmt.Sprintf("NustDB 磁盘索引模式初始化失败：%s", err.Error()))
		panic(err)
	}
	connect.diskindex = &DiskIndexConn{}
	connect.diskindex.DB = filedb

	if enable {
		opts := inmemory.DefaultOptions
		memory, err := inmemory.Open(opts)
		if nil != err {
			logger.FAULT.Fatalf(fmt.Sprintf("NustDB 内存模式初始化失败：%s", err.Error()))
			panic(err)
		}
		connect.memory = &MemoryConn{}
		connect.memory.DB = memory
	}
	return connect
}

// 获取磁盘索引模式的数据库连接
func GetDiskInxNustDB() *DiskIndexConn {
	return connect.diskindex
}

// 获取内存模式的索引链接
func GetMemoryNustDB() *MemoryConn {
	return connect.memory
}
